
import _Banque.*;
import _Exception.BUException;
import _Exception.IPException;
import _Tests.Tests;

public class TI_Banque_N4 {

	public static void main(String[] args) throws IPException, BUException {
		
		Tests.Begin("Integration du package _Banque", "1.0.0");
		
		Banque B1= new Banque("S2D","12345", "IUT Info", "01234567891011");
		B1.creerRegion("PACA");
		int A1= B1.ouvrirAgence("PACA", "19 Rue Soleau");
		Titulaire Dorian= new Titulaire("Lizarralde", "Dorian", 
								"1920/09/22", "Ici");
		AgenceBancaire AG1= B1.getAgence(A1);
		
		Tests.Design("Cycle de vie d'un client", 3);
		{
			
			Tests.Case("Controle du contexte"); {
				
				Tests.Unit("\nS2D - Code : 12345\nIUT Info\n"+ 
					"SIRET : 01234567891011", "\n" + B1.toString());
				Tests.Unit("19 Rue Soleau", AG1.toString());
				Tests.Unit("LIZARRALDE Dorian (1920/09/22) - Ici", 
					Dorian.toString());
			}
			
			System.out.println("Ouverture d'un compte");
			long L1= AG1.ouvrirCompte(Dorian);
			
			System.out.println("Versement d'argent dessus");
					
			AG1.executer(L1, 'V', "Cheque n�5762", 1250.50f);
			
			Tests.Case("Controle du compte"); {
				
				Tests.Unit(true, AG1.getCompteBancaire(Dorian, 
											'C').containsKey(L1));
				Tests.Unit("LIZARRALDE Dorian", 
						AG1.compteBancaire(L1).getIdentiteTitulaire());
				Tests.Unit(1250.5f, AG1.compteBancaire(L1).getSoldeCompte());
			}
			
			System.out.println("Retrait sur le compte");
			
			AG1.executer(L1, 'R', "Facture n�1", 200.f);
			
			System.out.println("Ouverture d'un compte jeune" +
				" remuner� � 3.5%");
					
			long L2= AG1.ouvrirCompte(Dorian, 0.035f);
			
			System.out.println("Versement sur le compte Epargne " +
				 					"depuis le compte Courant");
					
			AG1.executer(L1, 'R', "Versement sur le compte Epargne", 702.f);
			AG1.executer(L2, 'V', "Versement depuis le compte Courant", 702.f);
			
			Tests.Case("Controle des comptes"); {
				
				Tests.Unit(true, AG1.getCompteBancaire(Dorian, 
											'E').containsKey(L2));
				Tests.Unit(348.5f, AG1.compteBancaire(L1).getSoldeCompte());
				Tests.Unit("LIZARRALDE Dorian", 
							AG1.compteBancaire(L2).getIdentiteTitulaire());
				Tests.Unit(702.f, AG1.compteBancaire(L2).getSoldeCompte());
			}
			
			System.out.println("Le client quitte le nid familiale");
					
			Dorian.setAdresse("Far Away");
			
			Tests.Case("Controle de la nouvelle adresse"); {
				
				Tests.Unit("LIZARRALDE Dorian (1920/09/22) - Far Away", 
											Dorian.toString());
			}
			
			System.out.println("Le client rencontre Claire " + 
				"qui possede un compte courant dans une autre Agence");
					
			Titulaire Claire= new Titulaire("DuPuis", "Claire", 
											"1920/11/24", "Pas loin");
			int A2= B1.ouvrirAgence("PACA", "17 des Fleurs");
			AgenceBancaire AG2= B1.getAgence(A2);
			long L3= AG2.ouvrirCompte(Claire);
			AG2.executer(L3, 'V', "Cheque n�7582", 2153.70f);
			
			Tests.Case("Controle de l'arriv�e de Claire"); {
				
				Tests.Unit("17 des Fleurs", AG2.toString());
				Tests.Unit("DUPUIS Claire (1920/11/24) - Pas loin", 
										Claire.toString());
				Tests.Unit(true, AG2.getCompteBancaire(Claire, 
										'C').containsKey(L3));
				Tests.Unit("DUPUIS Claire", 
						AG2.compteBancaire(L3).getIdentiteTitulaire());
				Tests.Unit(2153.70f, 
						AG2.compteBancaire(L3).getSoldeCompte());
			}
			
			System.out.println("Ils se mettent en couple" +
				" et Claire joint son compte � Dorian");
			
			AG1.executer(L1, 'V', "Integration du compte de Claire", 
				AG2.compteBancaire(L3).getSoldeCompte());
			AG2.fermerCompte(L3);
			
			Tests.Case("Controle du nouveau solde " + 
				" et de la cloture de celui de Claire"); {
				
				Tests.Unit(2502.2f, 
					AG1.compteBancaire(L1).getSoldeCompte());
			}
		}
		Tests.End();
	}
}
